Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Z-Buffer</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Z-Buffer"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Z-Buffer rootpage-Z-Buffer skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Z-Buffer</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Das <b>Z-Buffering</b> (auch <i>Depth Buffering,</i> <i>Tiefenpuffer-</i><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> oder <i>Tiefenspeicher-Verfahren</i><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>) ist ein Verfahren der <a href="Computergrafik" title="Computergrafik">Computergrafik</a> zur <a href="Sichtbarkeitsproblem" title="Sichtbarkeitsproblem">Verdeckungsberechnung</a>, also um die vom Betrachter aus sichtbaren <a href="3D" title="3D">dreidimensionalen</a> Flächen in einer Computergrafik zu ermitteln. Durch Tiefeninformationen in einem sogenannten <b>Z-Buffer</b> („Z-<a href="Puffer_(Informatik)" title="Puffer (Informatik)">Puffer</a>“) stellt das Verfahren <a href="Pixel" title="Pixel">pixelweise</a> fest, welche Elemente einer Szene gezeichnet werden müssen und welche verdeckt sind. Praktisch alle heutigen <a href="Grafikkarte" title="Grafikkarte">Grafikkarten</a> implementieren Z-Buffering direkt in Hardware. Als Entwickler des Z-Buffer-Verfahrens gilt <a href="Edwin_Catmull" title="Edwin Catmull">Edwin Catmull</a>;<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> allerdings beschrieb <a href="Wolfgang_Stra%C3%9Fer" title="Wolfgang Straßer">Wolfgang Straßer</a> das Prinzip etwa zur gleichen Zeit in einem anderen Kontext.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Die wichtigste Alternative zum Z-Buffering ist der <a href="Raytracing" title="Raytracing">Raytracing</a>-Algorithmus.
</p>
<div class="mw-heading mw-heading2"><h2 id="Funktionsweise">Funktionsweise</h2></div>
<p>Das Prinzip des Z-Buffering ist sehr einfach. Neben dem sichtbaren Teil des <a href="Framebuffer" title="Framebuffer">Bildspeichers</a>, der die aktuellen Farbwerte enthält, gibt es einen weiteren Speicher, den Z-Buffer, der die Tiefe des sichtbaren Objekts an jedem Pixel enthält. Alternativ können die Pixelwerte im Framebuffer um einen <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/bf368e72c009decd9b6686ee84a375632e11de98.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.088ex; height:1.676ex;" alt="{\displaystyle z}" loading="lazy"></span>-Wert erweitert werden. Zu Beginn werden die Einträge im Z-Buffer auf einen Wert gesetzt, der für eine unendliche Entfernung steht (Backplane Distance). Der Framebuffer wird mit der Hintergrundfarbe initialisiert. Jedes Polygon wird nun <a href="Rasterung_von_Polygonen" title="Rasterung von Polygonen">gerastert</a>. Nur wenn der aktuell gerasterte Punkt des Polygons näher am Betrachter liegt als der Punkt, dessen Entfernung im Z-Buffer eingetragen ist, werden die Werte im Z-Buffer und im Framebuffer durch die Entfernung beziehungsweise die Farbe des aktuellen Polygons ersetzt.
</p>
<dl><dd></dd></dl>
<div style="clear:both;"></div>
<p>Die Reihenfolge, in der die <a href="Polygon" title="Polygon">Polygone</a> gerastert werden, ist im Prinzip beliebig. Nicht nur Polygone, sondern beliebige weitere <a href="Grafisches_Primitiv" title="Grafisches Primitiv">grafische Primitive</a> können mit Hilfe des Z-Buffers gerendert werden.
</p><p>Die Speichergröße der Werte im Z-Buffer hat einen großen Einfluss auf die Qualität des gerenderten Bildes. Wenn zwei Objekte sehr eng beieinander liegen, können bei einem Z-Buffer mit 8&nbsp;<a href="Bit" title="Bit">Bit</a> pro Pixel leicht <a href="Artefakt_(Computergrafik)" title="Artefakt (Computergrafik)">Artefakte</a> entstehen. 16, 24 oder 32&nbsp;Bit tiefe Z-Buffer erzeugen weniger Artefakte.
</p><p>Auf aktuellen <a href="Grafikkarte" title="Grafikkarte">Grafikkarten</a> beansprucht der Z-Buffer einen bedeutenden Teil des verfügbaren Speichers und der <a href="Daten%C3%BCbertragungsrate" title="Datenübertragungsrate">Datenübertragungsrate</a>. Mit verschiedenen Methoden wird versucht, den Einfluss des Z-Buffers auf die Leistung der Grafikkarte zu reduzieren. Dies ist zum Beispiel durch die <a href="Datenkompression" title="Datenkompression">verlustfreie Kompression</a> der Daten möglich, da das Komprimieren und Dekomprimieren der Daten kostengünstiger ist als die Erhöhung der Datenübertragungsrate einer Karte. Ein anderes Verfahren spart Löschvorgänge im Z-Buffer: die Tiefeninformation wird mit alternierendem <a href="Vorzeichen_(Zahl)" title="Vorzeichen (Zahl)">Vorzeichen</a> in den Z-Buffer geschrieben. Ein Bild wird mit positiven Vorzeichen gespeichert, das nächste Bild mit negativem, erst dann muss gelöscht werden. Eine weitere Möglichkeit zur Optimierung ist die Vorsortierung der Primitiven: Werden zunächst die näherliegenden Primitiven gerendert, kann bei den weiter entfernten später direkt entschieden werden, ob bzw. welche Pixel gerendert werden müssen und welche von Vordergrundobjekten verdeckt werden, wodurch <a href="Texture_Mapping" title="Texture Mapping">Texturierungs</a>- und <a href="Pixel-Shader" title="Pixel-Shader">Pixel-Shader</a>-Vorgänge eingespart werden können.
</p>
<div class="mw-heading mw-heading2"><h2 id="Algorithmus">Algorithmus</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Pseudocode">Pseudocode</h3></div>
<p>Der Z-Buffer-<a href="Algorithmus" title="Algorithmus">Algorithmus</a> löst das <a href="Sichtbarkeitsproblem" title="Sichtbarkeitsproblem">Sichtbarkeitsproblem</a>, indem für jeden <a href="Pixel" title="Pixel">Pixel</a> die Position des dargestellten Objektes und die Farbinformation gespeichert wird. Weil als Blickrichtung normalerweise die z-Richtung verwendet wird, entsprechen die x-Werte und y-Werte dieser Position denen der Abbildungsebene und es braucht nur der z-Wert gespeichert zu werden. Man braucht also zusätzlich zum <a href="Bildpuffer" class="mw-redirect" title="Bildpuffer">Bildpuffer</a> einen weiteren Speicherbereich, der für jedes Pixel einen <a href="Koordinatensystem" title="Koordinatensystem">Koordinatenwert</a> (z-Wert) aufnehmen kann. Nun kann man alle Objekte in beliebiger Reihenfolge zeichnen. Die z-Werte des nächsten zu zeichnenden Objektes werden berechnet und mit den z-Werten der Pixel verglichen, in die das Objekt gezeichnet werden soll. Wenn der neue z-Wert näher zum Betrachter, also größer ist, dann wird das Objekt an dieser Stelle neu gezeichnet und der z-Wert im z-Puffer ebenfalls ersetzt. Andernfalls ist das neue Objekt verdeckt und an dieser Stelle wird nicht gezeichnet.
</p><p>Der folgende <a href="Pseudocode" title="Pseudocode">Pseudocode</a> zeigt die Struktur des Z-Buffer-<a href="Algorithmus" title="Algorithmus">Algorithmus</a>:<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
<pre><b>for all</b> (x,y) // Initialisierung des Hintergrundes
{
depthBuff(x,y) = -1 // Setzt den z-Wert auf größtmögliche Entfernung
frameBuff(x,y) = backgroundColor
}
<b>for each</b> polygon P // Schleife, die alle Polygone durchläuft
{
<b>for each</b> position (x,y) on polygon P // Schleife, die alle Pixel des aktuellen Polygons durchläuft
{
calculate depth z
<b>if</b> (z &gt; depthBuff(x,y)) // Wenn der neue z-Wert näher zum Betrachter, also größer ist, dann wird das Objekt an dieser Stelle neu gezeichnet und der z-Wert im Z-Buffer ebenfalls ersetzt. Andernfalls ist das neue Objekt verdeckt und an dieser Stelle wird nicht gezeichnet.
{
depthBuff(x,y) = z
frameBuff(x,y) = surfColor(x,y)
}
}
}
</pre>
<div class="mw-heading mw-heading2"><h2 id="Codierung_der_Tiefeninformationen">Codierung der Tiefeninformationen</h2></div>

<div class="sieheauch" role="navigation" style="font-style:italic;"><span class="sieheauch-text">Siehe auch</span>: <a href="Grafikpipeline" title="Grafikpipeline">Grafikpipeline</a></div>
<p>Der Bereich der Tiefeninformation im Kameraraum, der zu rendern ist, wird häufig durch den <i>nah</i>-Wert und <i>fern</i>-Wert von <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/bf368e72c009decd9b6686ee84a375632e11de98.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.088ex; height:1.676ex;" alt="{\displaystyle z}" loading="lazy"></span> definiert. Nach einer Perspektivtransformation wird der neue Wert von <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/bf368e72c009decd9b6686ee84a375632e11de98.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.088ex; height:1.676ex;" alt="{\displaystyle z}" loading="lazy"></span>, hier als <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z'}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mi>z</mi>
<mo>′</mo>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z'}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/7c017ef8616d0c836e4b2a88c40931333c38dd19.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.775ex; height:2.509ex;" alt="{\displaystyle z'}" loading="lazy"></span> bezeichnet, wie folgt berechnet:
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z'={\frac {{\mbox{fern}}+{\mbox{nah}}}{{\mbox{fern}}-{\mbox{nah}}}}+{\frac {1}{z}}\left({\frac {-2\cdot {\mbox{fern}}\cdot {\mbox{nah}}}{{\mbox{fern}}-{\mbox{nah}}}}\right)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mi>z</mi>
<mo>′</mo>
</msup>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>fern</mtext>
</mstyle>
</mrow>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>nah</mtext>
</mstyle>
</mrow>
</mrow>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>fern</mtext>
</mstyle>
</mrow>
<mo>−<!-- − --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>nah</mtext>
</mstyle>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mi>z</mi>
</mfrac>
</mrow>
<mrow>
<mo>(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow>
<mo>−<!-- − --></mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>fern</mtext>
</mstyle>
</mrow>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>nah</mtext>
</mstyle>
</mrow>
</mrow>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>fern</mtext>
</mstyle>
</mrow>
<mo>−<!-- − --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mtext>nah</mtext>
</mstyle>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo>)</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z'={\frac {{\mbox{fern}}+{\mbox{nah}}}{{\mbox{fern}}-{\mbox{nah}}}}+{\frac {1}{z}}\left({\frac {-2\cdot {\mbox{fern}}\cdot {\mbox{nah}}}{{\mbox{fern}}-{\mbox{nah}}}}\right)}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/ebc378328d62b96f161dbae867aa560a0fb9d10e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:39.754ex; height:6.176ex;" alt="{\displaystyle z'={\frac {{\mbox{fern}}+{\mbox{nah}}}{{\mbox{fern}}-{\mbox{nah}}}}+{\frac {1}{z}}\left({\frac {-2\cdot {\mbox{fern}}\cdot {\mbox{nah}}}{{\mbox{fern}}-{\mbox{nah}}}}\right)}" loading="lazy"></span></dd></dl>
<p>Dabei ist <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z'}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mi>z</mi>
<mo>′</mo>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z'}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/7c017ef8616d0c836e4b2a88c40931333c38dd19.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.775ex; height:2.509ex;" alt="{\displaystyle z'}" loading="lazy"></span> der neue Wert von <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/bf368e72c009decd9b6686ee84a375632e11de98.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.088ex; height:1.676ex;" alt="{\displaystyle z}" loading="lazy"></span> im Kameraraum. Manchmal werden auch die Abkürzungen <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle w}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>w</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle w}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/88b1e0c8e1be5ebe69d18a8010676fa42d7961e6.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.664ex; height:1.676ex;" alt="{\displaystyle w}" loading="lazy"></span> und <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle w'}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mi>w</mi>
<mo>′</mo>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle w'}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/98af407af5c02e29010c7563af95f8986026679c.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.349ex; height:2.509ex;" alt="{\displaystyle w'}" loading="lazy"></span> verwendet.
</p><p>Die resultierenden Werte von <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z'}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mi>z</mi>
<mo>′</mo>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z'}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/7c017ef8616d0c836e4b2a88c40931333c38dd19.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.775ex; height:2.509ex;" alt="{\displaystyle z'}" loading="lazy"></span> werden auf Werte zwischen −1 und 1 normiert, wobei die Fläche bei <i>nah</i> den Wert −1 und die Fläche bei <i>fern</i> den Wert 1 erhält. Werte außerhalb dieses Bereichs stammen von Punkten, die sich nicht im Sichtbereich befinden, und sollten nicht gerendert werden.
</p><p>Bei der Implementierung eines Z-Buffers werden die Werte der Scheitelpunkte eines Polygons <a href="Lineare_Interpolation" class="mw-redirect" title="Lineare Interpolation">linear interpoliert</a> und die <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z'}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mi>z</mi>
<mo>′</mo>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z'}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/7c017ef8616d0c836e4b2a88c40931333c38dd19.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.775ex; height:2.509ex;" alt="{\displaystyle z'}" loading="lazy"></span>-Werte einschließlich der Zwischenwerte im Z-Buffer gespeichert. Die Werte von <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z'}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mi>z</mi>
<mo>′</mo>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z'}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/7c017ef8616d0c836e4b2a88c40931333c38dd19.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.775ex; height:2.509ex;" alt="{\displaystyle z'}" loading="lazy"></span> sind wesentlich enger an der Nah-Fläche verteilt und wesentlich mehr zur Fern-Fläche hin verstreut, was zu einer höheren Genauigkeit der Darstellung nahe dem Kamerastandpunkt führt. Je enger die Nah-Fläche an die Kamera gesetzt wird, desto geringer ist die Präzision im Fernbereich. Eine häufige Ursache für unerwünschte Artefakte bei entfernten Objekten ist, dass die Nah-Fläche zu eng an die Kamera gesetzt wurde. Diese als <i>Z-Fighting</i> (Z-Konflikt, Tiefenkonflikt) bezeichneten Artefakte treten insbesondere dann auf, wenn zwei koplanare Flächen sehr nahe beieinander sind, beispielsweise eine Wand und ein darauf angebrachtes Plakat. Welches von beiden Polygonen dann im Vordergrund liegt, ist im Wesentlichen zufällig und kann sich auch durch geringfügige Änderungen des Kamerastandortes ändern. Zur Abhilfe müssen vom Programmierer explizit Maßnahmen ergriffen werden, etwa indem die Z-Werte des Plakates künstlich verändert werden oder durch den Einsatz eines sogenannten <a href="Stencilbuffer" title="Stencilbuffer">Stencilbuffers</a>.
</p><p>Da die Abstandswerte nicht gleichmäßig im Z-Buffer abgelegt werden, werden nahe Objekte besser dargestellt als ferne, da ihre Werte genauer abgespeichert sind. Allgemein ist dieser Effekt erwünscht, er kann aber auch zu offensichtlichen Artefakten führen, wenn sich Objekte voneinander entfernen. Eine Variation des Z-Bufferings mit ausgeglicheneren Entfernungswerten ist das sogenannte <b>W-Buffering.</b> Um einen W-Buffer zu implementieren, werden die unveränderten Werte von <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/bf368e72c009decd9b6686ee84a375632e11de98.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.088ex; height:1.676ex;" alt="{\displaystyle z}" loading="lazy"></span> bzw. <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle w}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>w</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle w}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/88b1e0c8e1be5ebe69d18a8010676fa42d7961e6.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.664ex; height:1.676ex;" alt="{\displaystyle w}" loading="lazy"></span> in den Buffer gespeichert, im Allgemeinen als <a href="Gleitkommazahl" title="Gleitkommazahl">Gleitkommazahlen</a>. Diese Werte können nicht linear interpoliert werden, sondern müssen <a href="Umkehrfunktion" title="Umkehrfunktion">invertiert</a>, interpoliert und wieder invertiert werden. Die resultierenden <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle w}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>w</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle w}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/88b1e0c8e1be5ebe69d18a8010676fa42d7961e6.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.664ex; height:1.676ex;" alt="{\displaystyle w}" loading="lazy"></span>-Werte sind, im Gegensatz zu <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/bf368e72c009decd9b6686ee84a375632e11de98.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.088ex; height:1.676ex;" alt="{\displaystyle z}" loading="lazy"></span>, gleichmäßig zwischen <i>nah</i> und <i>fern</i> verteilt. Ob ein Z-Buffer oder ein W-Buffer zu besseren Bildern führt, hängt vom jeweiligen Anwendungszweck ab.
</p>
<div class="mw-heading mw-heading2"><h2 id="Vor-_und_Nachteile">Vor- und Nachteile</h2></div>
<ul><li>Vorteile
<ul><li>einfache Implementierung (sowohl in Software als auch direkt in Hardware)</li>
<li>keine Vorsortierung der Eingabe nötig</li>
<li>sehr schnell</li>
<li>einfache Parallelisierung möglich (z.&nbsp;B. Unterteilung in kleinere Quadranten)</li>
<li>kein wahlfreier Zugriff auf die Szene nötig</li></ul></li>
<li>Nachteile
<ul><li>jedes Polygon der Eingabe wird gerendert</li>
<li>die Laufzeit wächst linear mit der Eingabegröße</li>
<li>es werden keine Zusammenhänge der Objekte ausgenutzt</li></ul></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Randomisierter_Algorithmus">Randomisierter Algorithmus</h2></div>
<p>Ein <a href="Randomisierter_Algorithmus" title="Randomisierter Algorithmus">randomisierter</a> Z-Buffer-<a href="Algorithmus" title="Algorithmus">Algorithmus</a> erzeugt ein <a href="Rendern_(Bildsynthese)" class="mw-redirect" title="Rendern (Bildsynthese)">gerendertes</a> Bild einer beliebigen <a href="Dreidimensional" class="mw-redirect" title="Dreidimensional">dreidimensionalen</a> Szene, die aus dreieckigen Figuren besteht. Dieser Ansatz ist unabhängig von der <a href="Topologie_(Mathematik)" title="Topologie (Mathematik)">Topologie</a> der Figuren. Die resultierende <a href="Laufzeit_(Informatik)" title="Laufzeit (Informatik)">Laufzeit</a> des Algorithmus wächst nur <a href="Logarithmisch" class="mw-redirect" title="Logarithmisch">logarithmisch</a> mit der Anzahl der Dreiecke in der Szene. Ihre Speicheranforderungen wachsen nur <a href="Lineare_Funktion" title="Lineare Funktion">linear</a> mit der Anzahl der Dreiecke und ermöglichen ein Instantiierungsschema, um den Speicherverbrauch weiter zu reduzieren.
</p><p>Die Wiedergabezeit für eine Szene, die aus <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>n</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle n}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/a601995d55609f2d9f5e233e36fbe9ea26011b3b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.395ex; height:1.676ex;" alt="{\displaystyle n}" loading="lazy"></span> Dreiecken besteht, die einen auf dem Bildschirm projizierten Bereich von <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>a</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle a}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/ffd2487510aa438433a2579450ab2b3d557e5edc.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.23ex; height:1.676ex;" alt="{\displaystyle a}" loading="lazy"></span> Pixeln abdecken, liegt in <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(a\cdot \log(n))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<mi>a</mi>
<mo>⋅<!-- ⋅ --></mo>
<mi>log</mi>
<mo>⁡<!-- ⁡ --></mo>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(a\cdot \log(n))}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/023e9ead422dc74f67611a80aa344667d5a62aa1.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:12.667ex; height:2.843ex;" alt="{\displaystyle O(a\cdot \log(n))}" loading="lazy"></span>. Der <a href="Algorithmus" title="Algorithmus">Algorithmus</a> verwendet <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(n)}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/34109fe397fdcff370079185bfdb65826cb5565a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\displaystyle O(n)}" loading="lazy"></span> Speicher und benötigt <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n\cdot \log(n))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>⋅<!-- ⋅ --></mo>
<mi>log</mi>
<mo>⁡<!-- ⁡ --></mo>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(n\cdot \log(n))}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/9340284081350cf4417f898e60e2d134c46f1f43.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:12.832ex; height:2.843ex;" alt="{\displaystyle O(n\cdot \log(n))}" loading="lazy"></span> Vorberechnungszeit. Das Einfügen und Entfernen eines Objekts kann in der Laufzeit <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(t)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(t)}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/2181f52974f20a5c4b5427d4898b3040ebaefbea.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.422ex; height:2.843ex;" alt="{\displaystyle O(t)}" loading="lazy"></span> durchgeführt werden, wobei <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle t}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>t</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle t}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/65658b7b223af9e1acc877d848888ecdb4466560.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:0.84ex; height:2.009ex;" alt="{\displaystyle t}" loading="lazy"></span> die Höhe eines <a href="Octree" title="Octree">Octrees</a> ist, der für die Objekte in der Szene erstellt wurde.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Sichtbarkeitsproblem" title="Sichtbarkeitsproblem">Sichtbarkeitsproblem</a></li>
<li><a href="Culling" title="Culling">Culling</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Tomas Akenine-Möller, Eric Haines: <i>Real-Time Rendering.</i> AK Peters, Natick Mass 2002, ISBN 1-56881-182-9</li>
<li>James D. Foley u.&nbsp;a.: <i>Computer Graphics: Principles and Practice.</i> Addison-Wesley, Reading 1995, ISBN 0-201-84840-6</li>
<li>David F. Rogers: <i>Procedural Elements for Computer Graphics.</i> WCB/McGraw-Hill, Boston 1998, ISBN 0-07-053548-5</li>
<li>Alan Watt: <i>3D Computer Graphics.</i> Addison-Wesley, Harlow 2000, ISBN 0-201-39855-9</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Hans-Joachim Bungartz u.&nbsp;a.: <i>Einführung in die Computergraphik: Grundlagen, geometrische Modellierung, Algorithmen,</i> S. 128. Vieweg, Braunschweig 2002, ISBN 3-528-16769-6</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">Michael Bender, Manfred Brill: <i>Computergrafik: ein anwendungsorientiertes Lehrbuch,</i> S. 67. Hanser, München 2006, ISBN 3-446-40434-1</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Edwin Catmull: <i>A Subdivision Algorithm for Computer Display of Curved Surfaces.</i> Dissertation, Report UTEC-CSc-74-133, Computer Science Department, University of Utah, Salt Lake City 1974</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text">Wolfgang Straßer: <i>Schnelle Kurven- und Flächendarstellung auf graphischen Sichtgeräten.</i> Dissertation, TU Berlin 1974</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text">W. K. Giloi: <i>Computer Graphics Pioneers: the Giloi’s School of Computer Graphics – Starting Computer Graphics in Germany.</i> ACM SIGGRAPH Computer Graphics 35, 4 (Nov. 2001): 12–13, <span class="-print"><a href="Internationale_Standardnummer_f%C3%BCr_fortlaufende_Sammelwerke" title="Internationale Standardnummer für fortlaufende Sammelwerke">ISSN</a>&nbsp;<span style="white-space:nowrap"><a rel="nofollow" class="external text" href="https://zdb-katalog.de/list.xhtml?t=iss%3D%220097-8930%22&amp;key=cql">0097-8930</a></span></span></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text">Werner Purgathofer, TU Wien: <a rel="nofollow" class="external text" href="https://www.cg.tuwien.ac.at/courses/EinfVisComp/Skriptum/SS13/EVC-20%20Sichtbarkeitsverfahren.pdf">Sichtbarkeitsverfahren</a></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text">University of Washington: <a rel="nofollow" class="external text" href="https://courses.cs.washington.edu/courses/csep557/09sp/lectures/hidden-surfaces.pdf">Hidden Surface Algorithms</a></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text">Michael Wand, Matthias Fischer, Ingmar Peter, Friedhelm Meyer auf der Heide, Wolfgang Straßer: <a rel="nofollow" class="external text" href="https://www.staff.uni-mainz.de/wandm/papers/siggraph01.pdf">The Randomized z-Buffer Algorithm: Interactive Rendering of Highly Complex Scenes</a></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-03-17" href="https://de.wikipedia.org/wiki/?title=Z-Buffer&amp;oldid=243212201">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>